<script>
const obj1 = {
    a: 1,
    b: {
        f: '2',
        g: '3',
    },
    c: {
        d: [
            1,
            2,
            {
                e: true,
            },
        ],
    },
}

let obj2 = {}


function plat(obj, prekey, resobj) {
    // prekey是用于累加.的
    prekey = prekey ? prekey + '.' : ''
    let keys = Object.keys(obj)
    keys.forEach((item) => {
        let val = obj[item]
        let type = typeof val
        // 判断对象值是否为对象（包括对象和array）
        if (type ==='object'  && val) {
            // 递归
            plat(val, prekey + item, resobj)
        } else {
            // 有值
            if (val !== null && val !== undefined) {
                // 给传递的要改变的数组赋值
                resobj[prekey + item] = val
            }
        }
    })
}
plat(obj1, '', obj2)
console.log(obj2);
// 目标对象
// const  obj2 = {
//   a: 1,
//   'b.f': '2',
//   'b.g': '3',
//   'c.d.0': 1,
//   'c.d.1': 2,
//   'c.d.2.e': true
// }
</script>